
package com.huaweicloud.saaslanding.install.enumeration;

import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Getter;

import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.annotation.Validated;

/**
 * 功能描述
 *
 * @since 2022-03-25
 */

@Getter
@Validated
@AllArgsConstructor
public enum SetupEnum {
    /**
     * 初始化操作
     */
    INSTALL("初始化", "0"),
    /**
     * 格式化操作
     */
    CLEAN("格式化", "1"),

    /**
     * 退出程序
     */
    EXIT("退出程序", "2");

    /**
     * 操作名称
     */
    private final String operation;

    /**
     * 操作标志位
     */
    private final String mark;

    /**
     * 判断当前命令是否支持，即是否有对应的枚举
     *
     * @param mark 标志
     * @return true：支持，false：不支持
     */
    public static Boolean isSupportedCommand(String mark) {
        if (StringUtils.isBlank(mark)) {
            return false;
        }

        for (SetupEnum setupEnum : SetupEnum.values()) {
            if (setupEnum.getMark().equals(mark)) {
                return true;
            }
        }

        return false;
    }

    /**
     * 根据标志获取对应的操作枚举，默认返回EXIT
     *
     * @param mark 标志
     * @return 操作枚举
     */
    public static SetupEnum getOrExit(String mark) {
        return getOrDefault(mark, SetupEnum.EXIT);
    }

    /**
     * 根据标志获取对应的操作枚举，默认返回EXIT
     *
     * @param mark 标志
     * @param defaultSetup 默认操作
     * @return 操作枚举
     */
    public static SetupEnum getOrDefault(String mark, @NotNull SetupEnum defaultSetup) {
        for (SetupEnum setupEnum : SetupEnum.values()) {
            if (setupEnum.getMark().equals(mark)) {
                return setupEnum;
            }
        }

        return defaultSetup;
    }
}
